﻿#include "../../lv_examples.h"
#if LV_USE_IMG && LV_BUILD_EXAMPLES
static lv_anim_timeline_t* anim_timeline = NULL;
static void set_angle(void * img, int32_t v)
{
    lv_img_set_angle(img, v);
}

static void set_zoom(void * img, int32_t v)
{
    lv_img_set_zoom(img, v);
}


static void anim_rGx_cb(void* var, int32_t v)
{
    lv_obj_set_x(var, v);
}
static void anim_lFx_cb(void* var, int32_t v)
{
    lv_obj_set_x(var, -v);
}
static void anim_uPy_cb(void* var, int32_t v)
{
    lv_obj_set_y(var, -v);
}

static void anim_dWy_cb(void* var, int32_t v)
{
    lv_obj_set_y(var, v);
}

static void btn_start_event_handler(lv_event_t* e)
{
    lv_obj_t* btn = lv_event_get_target(e);

    bool reverse = lv_obj_has_state(btn, LV_STATE_CHECKED);
    lv_anim_timeline_set_reverse(anim_timeline, reverse);
    lv_anim_timeline_start(anim_timeline);

}
#define aLenth (3*4)
lv_anim_t a[aLenth];


LV_IMG_DECLARE(apple);
LV_IMG_DECLARE(github);
LV_IMG_DECLARE(gmail);
LV_IMG_DECLARE(google);
static const lv_img_dsc_t* ico_arr[] = {
    &apple,
    &github,
    &gmail,
    &google
};
/**
 * Show transformations (zoom and rotation) using a pivot point.
 */
void lv_example_img_3(void)
{
    LV_IMG_DECLARE(google);
    lv_obj_t* obj = lv_obj_create(lv_scr_act());
   lv_obj_set_style_radius(obj, LV_RADIUS_CIRCLE, 0);

    lv_obj_set_size(obj, 240, 240);

    for (uint8_t i = 0; i < aLenth; i++) {
        /*Now create the actual image*/
        lv_obj_t* img = lv_img_create(obj);
        if (0 == i) lv_img_set_src(img, ico_arr[0]);
        else if (3 == i) lv_img_set_src(img, ico_arr[1]);
        else if (6 == i) lv_img_set_src(img, ico_arr[2]);
        else if (9 == i) lv_img_set_src(img, ico_arr[3]);
        lv_obj_align(img, LV_ALIGN_CENTER, 0, 0);
        lv_img_set_pivot(img, 64 / 2, 64 / 2);    /*Rotate around the top left corner*/
        lv_img_set_antialias(img, true);

        
        lv_anim_init(&a[i]);
        lv_anim_set_var(&a[i], img);
        if (0 == i) lv_anim_set_exec_cb(&a[i], anim_rGx_cb);
        else if (3 == i) lv_anim_set_exec_cb(&a[i], anim_lFx_cb);
        else if (6 == i) lv_anim_set_exec_cb(&a[i], anim_uPy_cb);
        else if (9 == i) lv_anim_set_exec_cb(&a[i], anim_dWy_cb);
        else;
        /*switch (i % 4) {
        case 0:
            lv_anim_set_exec_cb(&a[i], anim_rGx_cb);
            break;

        case 1:
            lv_anim_set_exec_cb(&a[i], anim_lFx_cb);
            break;

        case 2:
            lv_anim_set_exec_cb(&a[i], anim_uPy_cb);
            break;

        case 3:
            lv_anim_set_exec_cb(&a[i], anim_dWy_cb);
            break;
        }*/

        lv_anim_set_values(&a[i], 0, 120 - 32);
       // lv_anim_set_playback_time(&a[i], 2000);
       // lv_anim_set_playback_delay(&a[i], 1000);
        lv_anim_set_path_cb(&a[i], lv_anim_path_overshoot);
        lv_anim_set_time(&a[i], 1000);
        //lv_anim_set_repeat_count(&a[i], LV_ANIM_REPEAT_INFINITE);

        i++;
        lv_anim_init(&a[i]);
        lv_anim_set_var(&a[i], img);
        lv_anim_set_exec_cb(&a[i], set_angle);
        lv_anim_set_values(&a[i], 0, 3600);
        lv_anim_set_time(&a[i], 1000);
       // lv_anim_set_repeat_count(&a[i], LV_ANIM_REPEAT_INFINITE);

        i++;
        lv_anim_init(&a[i]);
        lv_anim_set_var(&a[i], img);
        lv_anim_set_exec_cb(&a[i], set_zoom);
        lv_anim_set_values(&a[i], 0, 256);
        lv_anim_set_time(&a[i], 1000);
       // lv_anim_set_playback_time(&a[i], 2000);
        //lv_anim_set_playback_delay(&a[i], 1000);
        //lv_anim_set_repeat_count(&a[i], LV_ANIM_REPEAT_INFINITE);



    }
//////////////////////////////////////////////////////////////////////////////////

     /* Create anim timeline */
    anim_timeline = lv_anim_timeline_create();
    for (uint8_t i = 0; i < aLenth; i++) {
        lv_anim_timeline_add(anim_timeline, 0, &a[i]);
    }
    lv_anim_timeline_start(anim_timeline);

    lv_obj_t* btn_start = lv_btn_create(obj);
    lv_obj_set_size(btn_start, 240, 240);
    lv_obj_set_style_opa(btn_start, LV_OPA_0, 0);
    lv_obj_add_event_cb(btn_start, btn_start_event_handler, LV_EVENT_VALUE_CHANGED, NULL);
    lv_obj_add_flag(btn_start, LV_OBJ_FLAG_IGNORE_LAYOUT);
    lv_obj_add_flag(btn_start, LV_OBJ_FLAG_CHECKABLE);
    lv_obj_align(btn_start, LV_ALIGN_CENTER, 0, 0);

    lv_obj_t* label_start = lv_label_create(btn_start);
    lv_label_set_text(label_start, "Start");
    lv_obj_center(label_start);




}

#endif
